package com.faithnmn.learnenglishbc.db;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;

import com.faithnmn.learnenglishbc.model.Quote;

import android.content.ContentValues;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;



public class DataBaseHelper extends SQLiteOpenHelper {
	private static String TAG = "DataBaseHelper"; // Tag just for the LogCat
													// window
	// destination path (location) of our database on device
	private static String DB_PATH = "";
	private static String DB_NAME = "QOU";// Database name
	private static String DB_ASSET_NAME = "qou.db";// Database name
	private SQLiteDatabase mDataBase;
	private final Context mContext;
	private static final int DB_Ver = 2;

	public DataBaseHelper(Context context) {
		super(context, DB_NAME, null, DB_Ver);// 1? its Database Version
		if (android.os.Build.VERSION.SDK_INT >= 17) {
			DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
		} else {
			DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
		}
		this.mContext = context;
	}

	public void createDataBase() throws IOException {
		// If database not exists copy it from the assets
		boolean mDataBaseExist = checkDataBase();
		if (!mDataBaseExist) {
			try {
				// Copy the database from assests
				copyDataBase();
				this.close();
				Log.e(TAG, "createDatabase database created");
			} catch (IOException mIOException) {
				throw new Error("ErrorCopyingDataBase");
			}
		}

	}

	// Check that the database exists here: /data/data/your package/databases/Da
	private boolean checkDataBase() {
		File dbFile = new File(DB_PATH + DB_NAME);
		// Log.v("dbFile", dbFile + "   "+ dbFile.exists());
		return dbFile.exists();
	}

	// Copy the database from assets
	private void copyDataBase() throws IOException {
		InputStream mInput = mContext.getAssets().open(DB_ASSET_NAME);
		String outFileName = DB_PATH + DB_NAME;
		OutputStream mOutput = new FileOutputStream(outFileName);
		byte[] mBuffer = new byte[1024];
		int mLength;
		while ((mLength = mInput.read(mBuffer)) > 0) {
			mOutput.write(mBuffer, 0, mLength);
		}
		mOutput.flush();
		mOutput.close();
		mInput.close();
	}

	// Open the database, so we can query it
	public boolean openDataBase() throws SQLException {
		String mPath = DB_PATH + DB_NAME;
		mDataBase = SQLiteDatabase.openDatabase(mPath, null,SQLiteDatabase.CREATE_IF_NECESSARY);
		return mDataBase != null;
	}

	@Override
	public synchronized void close() {
		if (mDataBase != null)
			mDataBase.close();
		super.close();
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		TblQuote.createTable(db);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		db.execSQL("DROP TABLE IF EXISTS " + TblQuote.TABLE_NAME);
		onCreate(db);
	}


	public Quote getQuote() {
		SQLiteDatabase db = getWritableDatabase();
		return TblQuote.getQuote(db);
	}
	
	
	public void insertQuotes(ArrayList<com.faithnmn.learnenglishbc.model.Quote> quotes) {
		SQLiteDatabase db = getWritableDatabase();
		if(quotes.size()>0){
			int tmp = quotes.size();
			Quote quote;
			for (int i = 0; i < tmp; i++) {
				quote = quotes.get(i);
				insertQuote(quote,db);
			}
		}
		db.close();
	}
	
	private static void insertQuote(Quote quote, SQLiteDatabase db) {
			ContentValues vl = new ContentValues();
			vl.put(TblQuote.Column.CREATED_TIME, quote.created_time+"");
			vl.put(TblQuote.Column.MESSAGE, quote.message);
			vl.put(TblQuote.Column.ID, quote.id);
			db.insert(TblQuote.TABLE_NAME, null, vl);
	}
}
